home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / netscape / applet / CastanetChannelInfo.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  4.9 KB  |  281 lines

  1. package netscape.applet;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Window;
  5. import java.io.File;
  6. import java.io.IOException;
  7. import java.net.URL;
  8. import java.util.Vector;
  9. import java.util.zip.ZipFile;
  10. import netscape.security.AppletSecurityException;
  11. import netscape.security.PrivilegeManager;
  12. import netscape.security.Target;
  13.  
  14. public final class CastanetChannelInfo {
  15.    private static final boolean debug = false;
  16.    private int pathlen;
  17.    private URL[] urls;
  18.    private String[] zips;
  19.    private ZipFile[] openZips;
  20.    private String host;
  21.    private String readPath;
  22.    private String writePath;
  23.    private static String workspacePath = null;
  24.    private ThreadGroup group;
  25.    private AppletClassLoader loader;
  26.    private Vector windows = new Vector();
  27.  
  28.    public CastanetChannelInfo(int var1, String var2, String var3, String var4, URL[] var5, String[] var6, ThreadGroup var7, URL var8) {
  29.       PrivilegeManager var9 = PrivilegeManager.getPrivilegeManager();
  30.       Target var10 = Target.findTarget("MarimbaInternalTarget");
  31.       var9.checkPrivilegeEnabled(var10);
  32.       this.pathlen = var1;
  33.       if (var5 == null && var6 == null) {
  34.          this.pathlen = 0;
  35.       }
  36.  
  37.       this.readPath = makeCanonicalPath(var2);
  38.       this.writePath = makeCanonicalPath(var3);
  39.       if (workspacePath == null) {
  40.          workspacePath = makeCanonicalPath(var4);
  41.       }
  42.  
  43.       this.urls = var5;
  44.       this.zips = var6;
  45.       if (var6 != null) {
  46.          for(int var11 = 0; var11 < this.zips.length; ++var11) {
  47.             if (this.zips[var11] != null) {
  48.                this.zips[var11] = makeCanonicalPath(this.zips[var11]);
  49.             }
  50.          }
  51.  
  52.          this.openZips = new ZipFile[var6.length];
  53.       }
  54.  
  55.       this.group = var7;
  56.       this.host = var8.getHost();
  57.       this.loader = new AppletClassLoader(var8, this);
  58.    }
  59.  
  60.    public static void setWorkspacePath(String var0) {
  61.       if (workspacePath == null) {
  62.          PrivilegeManager var1 = PrivilegeManager.getPrivilegeManager();
  63.          Target var2 = Target.findTarget("MarimbaAppContextTarget");
  64.          var1.checkPrivilegeEnabled(var2);
  65.          workspacePath = makeCanonicalPath(var0);
  66.       }
  67.    }
  68.  
  69.    public static boolean marimbaCheckAccess(String var0, ClassLoader var1, boolean var2, boolean var3) {
  70.       if (var3) {
  71.          return checkFileAccess(var0, workspacePath, var2, true);
  72.       } else {
  73.          try {
  74.             AppletClassLoader var4 = (AppletClassLoader)var1;
  75.             return var2 ? var4.marimbaCheckRead(var0, var3) : var4.marimbaCheckWrite(var0, var3);
  76.          } catch (ClassCastException var5) {
  77.             return false;
  78.          }
  79.       }
  80.    }
  81.  
  82.    public static boolean checkThreadGroup(ClassLoader var0, ThreadGroup var1) {
  83.       if (var0 == null) {
  84.          return true;
  85.       } else {
  86.          try {
  87.             AppletClassLoader var2 = (AppletClassLoader)var0;
  88.             return var2.marimbaCheckThreadGroup(var1);
  89.          } catch (ClassCastException var3) {
  90.             return false;
  91.          }
  92.       }
  93.    }
  94.  
  95.    public static void checkTopLevelWindow(ClassLoader var0, Object var1) {
  96.       if (var0 != null) {
  97.          try {
  98.             AppletClassLoader var2 = (AppletClassLoader)var0;
  99.             var2.marimbaCheckTopLevelWindow(var1);
  100.          } catch (ClassCastException var3) {
  101.          }
  102.       }
  103.    }
  104.  
  105.    public static String marimbaGetHost(ClassLoader var0) {
  106.       if (var0 == null) {
  107.          return null;
  108.       } else {
  109.          try {
  110.             AppletClassLoader var1 = (AppletClassLoader)var0;
  111.             return var1.marimbaGetHost();
  112.          } catch (ClassCastException var2) {
  113.             return null;
  114.          }
  115.       }
  116.    }
  117.  
  118.    public void close() {
  119.       this.loader.close();
  120.    }
  121.  
  122.    public Class loadClass(String var1) throws ClassNotFoundException {
  123.       return this.loader.loadClass(var1);
  124.    }
  125.  
  126.    public Class classFromBytes(byte[] var1, String var2) {
  127.       return this.loader.classFromBytes(var1, var2);
  128.    }
  129.  
  130.    boolean checkRead(String var1, boolean var2) {
  131.       return checkFileAccess(var1, this.readPath, true, var2);
  132.    }
  133.  
  134.    boolean checkWrite(String var1, boolean var2) {
  135.       return checkFileAccess(var1, this.writePath, false, var2);
  136.    }
  137.  
  138.    boolean checkThreadGroup(ThreadGroup var1) {
  139.       return var1 == this.group;
  140.    }
  141.  
  142.    void checkTopLevelWindow(Object var1) {
  143.       try {
  144.          this.windows.addElement((Window)var1);
  145.       } catch (ClassCastException var2) {
  146.       }
  147.    }
  148.  
  149.    int getPathlen() {
  150.       return this.pathlen;
  151.    }
  152.  
  153.    URL getURL(int var1) {
  154.       return this.urls == null ? null : this.urls[var1];
  155.    }
  156.  
  157.    ZipFile getZip(int var1) {
  158.       if (this.zips != null && this.zips[var1] != null) {
  159.          if (this.openZips[var1] == null) {
  160.             PrivilegeManager var2 = PrivilegeManager.getPrivilegeManager();
  161.             Target var3 = Target.findTarget("MarimbaAppContextTarget");
  162.  
  163.             try {
  164.                var2.enablePrivilege(var3);
  165.                this.openZips[var1] = new ZipFile(this.zips[var1]);
  166.             } catch (IOException var4) {
  167.             }
  168.  
  169.             var2.disablePrivilege(var3);
  170.          }
  171.  
  172.          return this.openZips[var1];
  173.       } else {
  174.          return null;
  175.       }
  176.    }
  177.  
  178.    synchronized void closeZips() {
  179.       if (this.windows != null) {
  180.          int var1 = this.windows.size();
  181.  
  182.          for(int var2 = 0; var2 < var1; ++var2) {
  183.             Window var3 = (Window)this.windows.elementAt(var2);
  184.             ((Component)var3).hide();
  185.             var3.dispose();
  186.          }
  187.       }
  188.  
  189.       if (this.openZips != null) {
  190.          for(int var5 = 0; var5 < this.openZips.length; ++var5) {
  191.             if (this.openZips[var5] != null) {
  192.                try {
  193.                   this.openZips[var5].close();
  194.                } catch (IOException var4) {
  195.                }
  196.  
  197.                this.openZips[var5] = null;
  198.             }
  199.          }
  200.       }
  201.  
  202.       this.pathlen = 0;
  203.       this.urls = null;
  204.       this.zips = null;
  205.       this.openZips = null;
  206.       this.host = null;
  207.       this.readPath = null;
  208.       this.writePath = null;
  209.       this.group = null;
  210.       this.loader = null;
  211.       this.windows = null;
  212.    }
  213.  
  214.    String getHost() {
  215.       return this.host;
  216.    }
  217.  
  218.    private static String makeCanonicalPath(String var0) {
  219.       Object var1 = null;
  220.       if (File.separatorChar == '\\' && var0.indexOf(47) != -1) {
  221.          var0 = var0.replace('/', '\\');
  222.       }
  223.  
  224.       try {
  225.          SecurityManager.enablePrivilege("UniversalFileRead");
  226.          SecurityManager.enablePrivilege("UniversalPropertyRead");
  227.          String var4 = (new File(var0)).getCanonicalPath();
  228.          SecurityManager.revertPrivilege();
  229.          return var4;
  230.       } catch (IOException var3) {
  231.          throw new AppletSecurityException(((Throwable)var3).getMessage() + ", \"" + var0 + "\"");
  232.       }
  233.    }
  234.  
  235.    private static boolean checkFileAccess(String var0, String var1, boolean var2, boolean var3) {
  236.       if (var0 == null) {
  237.          return false;
  238.       } else if (var3) {
  239.          return checkFileAccess(var0, workspacePath, var2, false);
  240.       } else if (var1 == null) {
  241.          return false;
  242.       } else {
  243.          var0 = makeCanonicalPath(var0);
  244.          if (!var0.startsWith(var1)) {
  245.             return false;
  246.          } else {
  247.             int var4 = 0;
  248.             int var5 = var1.length();
  249.             int var6 = var0.length();
  250.  
  251.             while(var5 < var6) {
  252.                int var7 = var0.indexOf(File.separatorChar, var5);
  253.                if (var7 < 0) {
  254.                   var7 = var6;
  255.                }
  256.  
  257.                if (var5 == var7) {
  258.                   ++var5;
  259.                } else if (var5 + 1 == var7 && var0.charAt(var5) == File.separatorChar) {
  260.                   var5 += 2;
  261.                } else if (var5 + 1 == var7 && var0.charAt(var5) == '.') {
  262.                   var5 += 2;
  263.                } else if (var5 + 2 == var7 && var0.charAt(var5) == '.' && var0.charAt(var5 + 1) == '.') {
  264.                   --var4;
  265.                   if (var4 < 0) {
  266.                      return false;
  267.                   }
  268.  
  269.                   var5 += 3;
  270.                } else {
  271.                   ++var4;
  272.                   var5 = var7 + 1;
  273.                }
  274.             }
  275.  
  276.             return true;
  277.          }
  278.       }
  279.    }
  280. }
  281.